import axios from 'axios'

import zm from '../zm'
// 配置不同环境下，调用不同接口
 
switch(process.env.NODE_ENV){
  // 生产环境，部署到服务器上的环境
  case 'production':
  axios.defaults.baseURL='http://39.105.152.194:8081/';
  break;
  //设置测式环境的接口地址
   case 'text':
  axios.defaults.baseURL='http://api.zhengqinantext.cn';
  break;
  //开发环境接口地址
  default:
    axios.defaults.baseURL='http://localhost:8081'
}
/**
 * 设置超时时间和跨域是否允许携带凭证
 */
axios.defaults.timeout=10000  //设置十秒
axios.defaults.withCredentials=true ;//例如：登录校验session和cookie

//let success200;
/**
 * 设置请求数据参数传递的格式，默认是json格式，但是在登录校验中后台一般设置请求格式：x-www-form-urlencoded(name=xxx,age=xxx)
 * 看服务器要求什么格式
 */
axios.defaults.headers['Content-Type']='application/x-www-form-urlencoded' //声明请求格式
//axios.defaults.transformRequest=data=>qs.stringify(data)  //qs是第三方库，转换为x-www-form-urlencoded,在request.js做了处理
let flag=false
/**
 * 设置请求拦截器：----在项目中发请求（请求没有发出去）可以做一些事情
 * 客户端->[请求拦截器]->服务器端
 * token校验（JWT）：接收到服务器的token,存储到vuex/本地存储中，每次向服务器发送请求，我们应该把token带上
 * config :发起请求的请求配置项
 */

axios.interceptors.request.use(config=>{
   //console.log(config)
    if(config.url.includes("export")||config.url.includes("Export")){
        flag=true//做导出时，前端收到的是blob对象，不是res了，所以response那块的操作不能判断了
        config.responseType='blob'
    }else{
        flag=false//这个js貌似只会加载一遍，所以下一个请求进来就得把flag重新赋值
    }
  /*let token=localStorage.getItem('token')
  token && (config.headers.Authoriztion=token)*/
  //success200=config.success200;//收到之后保存在http.js，并在response中调用
  return config 
},error=>{
  return Promise.reject(error)
})

/**
 * 设置响应拦截器
 * 服务器端返回信息->[响应拦截器]->客户端js获取到信息
 * response中包含属性：
 * data：相应数据,code:响应状态码,headers：响应头,config：响应提供的配置信息,request
 */
axios.interceptors.response.use(response => {
    let res = response.data;
    //console.log(res)
    if (res.code === "200" || res.code === 200 || flag) {//请求成功
        //console.log(res)
        return res
        //success200(res)
    }else if (res.code === "403" || res.code === 403) {//没对应权限
        zm.error(`您暂无<${res.msg}>权限`)
    }else if(res.code ==='401' || res.code === 401){//未登录
        zm.openLogin()
    }else{
        zm.error(`操作出现了问题，error:<${res.msg}>`)
    }
},error=>{
  let {response}=error
  // 如果有返回结果
  if(response){
    switch(response.code){
      //这里面根据公司需求进行写
      case 404:
      //进行错误跳转之类
      break;  
    }
  }else{
    //服务器没有返回结果 分两种情况 断网  服务器崩了
    if(!window.navigator.onLine){
      //断网处理：跳转到断网页面
      return
    }
    return Promise.reject(error)
  }
})

export default axios